// pages/cart/index.js
import { getSetting, chooseAddress, openSetting, showModal, showToast } from '../../lib/asyncWx/asyncWx.js';
const regeneratorRuntime = require('../../lib/runtime/runtime.js');
// 全选和反选功能
// 1. 先绑定事件
// 2. 获取cartList中的check
Page({

  /**
   * 页面的初始数据
   */
  data: {
    address: {},
    cart: [], // 购物车中的商品信息
    allCheck: false, // 全选
    totalNum: 0,
    totalPrice: 0,
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },
  // 显示用户地址
  onShow() {
    // 从缓存中获取地址
    const address = wx.getStorageSync('address');
    // 获取购物车的商品信息
    const cart = wx.getStorageSync('cartList') || [];
    // 计算全选
    // const allCheck = cart.length ? cart.every(item => item.check) : false;
    this.setData({
      address,
    });
    this.setCart(cart);
  },
  // 获取用户收货地址信息
  async handleChooseAddress() {
    try {
      // 1 获取 权限状态
      const res1 = await getSetting();
      console.log(res1);
      const scopeAddress = res1.authSetting["scope.address"];
      // 2 判断 权限状态
      if (scopeAddress === false) {
        await openSetting();
      }
      // 4 调用获取收货地址的 api
      let address = await chooseAddress();
      address.all = address.provinceName + address.cityName + address.countyName + address.detailInfo;

      // 5 存入到缓存中
      wx.setStorageSync("address", address);

    } catch (error) {
      console.log(error);
    }
  },

  // 商品的选中功能
  handleItemChange(e) {
    // 获取商品的id
    let { id } = e.currentTarget.dataset;
    console.log(id);
    // 获取对应的商品
    let { cart } = this.data;
    let index = cart.findIndex(v => v.goods_id === id);
    // check状态取反
    cart[index].check = !cart[index].check;
    console.log(cart);
    // 重新设置为data中和缓存中
    this.setData({
      cart,
    });
    wx.setStorageSync('cartList', cart);
    this.setCart(cart);
  },
  // 设置购物车状态同时 重新计算 底部工具栏的数据 全选 总价格 购买的数量
  setCart(cart) {
    let allCheck = true;
    // 1 总价格 总数量
    let totalPrice = 0;
    let totalNum = 0;
    cart.forEach(v => {
      if (v.check) {
        totalPrice += v.num * v.goods_price;
        totalNum += v.num;
      } else {
        allCheck = false;
      }
    })
    console.log('totalPrice', totalPrice);
    console.log('totalNum', totalNum);
    // 判断数组是否为空
    allCheck = cart.length == 0 ? false : allCheck;
    console.log('allCheck', allCheck);
    this.setData({
      cart,
      totalPrice, totalNum, allCheck
    });
    wx.setStorageSync("cart", cart);
  },
  // 全选功能以及取消全选
  handleItemAllChecked() {
    // 获取allcheck和cartList
    let { allCheck, cart } = this.data;
    console.log('allCheck', allCheck);
    // 修改值
    allCheck = !allCheck;
    // 遍历cart,所有的item的check取反
    cart.forEach((item, index) => {
      item.check = allCheck;
    });
    this.setCart(cart);
  },
  // 商品数量的增和减
  async handleItemNumChange(e) {
    console.log(e);
    let { id, type } = e.currentTarget.dataset;
    console.log('id', id);
    console.log('type', type);
    // 获取cart
    let { cart } = this.data;
    console.log('cart', cart);
    // 拿到该商品的索引
    let index = cart.findIndex(item => item.goods_id === id);
    console.log('index', index);
    if (type === 'add') {
      // 数量 + 1
      cart[index].num += 1;
      this.setCart(cart);
    } else {
      // 数量 减1
      // 如果num === 1,再减少就是删除商品
      if (cart[index].num == 1) {
        // 删除商品
        const res = await showModal({ content: '您确定要删除该商品吗？' });
        console.log(res);
        if (res.confirm) {
          cart.splice(index, 1);
          this.setData({
            cart,
          });
          this.setCart(cart);
        };
      } else {
        cart[index].num += -1;
        this.setCart(cart);
      };
    };
  },
  // 结算功能
  async handleSettle() {
    console.log('结算');
    // 需要购物车先有商品,并且已经获取了收货地址
    let { cart, address } = this.data;
    // 判断是否有商品
    if (cart && cart.length === 0) {
      return;
    }
    // 判断是否有收货地址
    if (!address.userName) {
      return;
    }
    // 跳转到支付页面
    wx.navigateTo({
      url: '/pages/pay/index',
      success: function (res) {
        // success
      },
      fail: function () {
        // fail
      },
      complete: function () {
        // complete
      }
    });
  }
})